package com.etalk.crm.service;


import com.etalk.crm.pojo.*;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * @author Jordan
 */
public interface LessonsService {

    /**
     * 查询用户已预约的课程
     * @param personId 学员id
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 结果
     */
    PageInfo<StudentLesson> searchBookedList(Integer personId, int pageNum, int pageSize);

    /**
     * 查询用户已完成的课程
     * @param personId 学员id
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 结果
     */
    PageInfo<StudentLesson> searchCompletedList(Integer personId, int pageNum, int pageSize);

    /**
     * 查询学员课程列表
     * @param personId 学员id
     * @param classState  课程状态
     * @param classStartTime 查询课程开始时间
     * @param classEndTime 查询课程结束时间
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页数据对象
     * @throws ParseException 转换日期格式错误
     */
    PageInfo<LessonResult> searchLessonPageByPersonId(int personId,Integer classState,String classStartTime, String classEndTime, Integer pageNum, Integer pageSize) throws ParseException;

    /**
     * 查询所有课程记录
     * @param record 查询条件
     * @param pageNum 页码
     * @param pageSize 页记录数
     * @return
     * @throws ParseException
     */
    PageInfo<LessonResult> searchLessonPage(LessonResult record, Integer pageNum, Integer pageSize);

    /**
     * 查询学员对课程的评价列表
     * @param record 查询条件
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 列表
     */
    PageInfo<StudentEvaluationResult> searchLessonStudentEvaluationByPage(StudentEvaluationResult record, int pageNum, int pageSize);

    /**
     * 修改官网首页是否显示本节课学员评价
     * @param lessonId 课程id
     * @param show 是否显示标记
     * @return
     */
    int updateLessonShowByLessonId(int lessonId, int show);

    /**
     * 查询后台取消课程原因列表
     * @return 原因列表
     */
    List<CancelCourseRecord> searchCancelCourseReasonList();

    /**
     * 查询调整课程的信息
     * @param lessonId 课程id
     * @return 课程信息
     */
    LessonResult searchChangeLessonInfoByLessonId(int lessonId);
    /**
     * 查询教师基地
     * @return
     */
    List<Map<String,Object>> searchTeacherSiteList();

    /**
     * 查询教师级别
     * @return
     */
    List<Map<String,Object>> searchTeacherLevelList();

    /**
     * 查询上课方式列表
     * @return
     */
    List<Map<String,Object>> searchClassWayList();

    /**
     * 查询调课更换老师原因
     * @return
     */
    List<Map<String,Object>> searchLessonChangeReasonList();

    /**
     * 查询老师空闲时间表
     * @param teacherLevel 老师级别id
     * @param strDate 查询日期
     * @param groupId 老师组id
     * @param teacherName 老师账号
     * @return
     */
    List<LessonResult> searchTeacherFreeClassTimeList(Integer teacherLevel, String strDate, Integer groupId, String teacherName);

    /**
     * 添加老师投诉学员处理结果
     * @param lessonId 课程id
     * @param result 处理结果
     * @return
     */
    @Transactional(rollbackFor=Exception.class)
    int updateTeaComplaintByLessonId(int lessonId, String result);

    /**
     * 查询课程老师评价信息
     * @param lessonId 课程id
     * @return
     */
    LessonComments searchCourseCommentsInfo(int lessonId);
}
